/**
 * 1.version:1.1 data:2022/11/24
 * 2.本文件可实现UART配置、CAN配置、中断与中断回调函数自由绑定
 */

#ifndef __BSP_H
#define __BSP_H

#include "main.h"

#ifdef HAL_UART_MODULE_ENABLED
#include "usart.h"
#endif /* HAL_UART_MODULE_ENABLED */

#ifdef HAL_CAN_MODULE_ENABLED
#include "can.h"
#endif /* HAL_CAN_MODULE_ENABLED */

// Interrupt source count define
#define GPIOx_PIN_COUNT 16
#define TIMx_COUNT 8
#define UARTx_COUNT 2
#define CANx_COUNT 1

//----------------------------------------- GPIO ----------------------------------------------
#ifdef HAL_GPIO_MODULE_ENABLED

// 联接GPIO中断源和中断回调函数
extern void AttachInterrupt_GPIO(uint16_t GPIO_Pin, int Callback_count, ...);

#endif /* HAL_GPIO_MODULE_ENABLED */

//----------------------------------------- TIM -----------------------------------------------
#ifdef HAL_TIM_MODULE_ENABLED
// 联接TIM Base中断源和中断回调函数
extern void AttachInterrupt_TIM_Base(TIM_HandleTypeDef *htim, int Callback_count, ...);
#endif /* HAL_TIM_MODULE_ENABLED */

//----------------------------------------- UART ----------------------------------------------
#ifdef HAL_UART_MODULE_ENABLED

// UART define
#define PRINT_UART huart1
// 串口打印
extern int UART_Print(char *fmt, ...);

// 联接UART中断源和中断回调函数
extern void AttachInterrupt_UART(UART_HandleTypeDef *huart, uint8_t RxBuf_Size, int Callback_count, ...);

#endif /* HAL_UART_MODULE_ENABLED */

//----------------------------------------- CAN -----------------------------------------------
#ifdef HAL_CAN_MODULE_ENABLED

// 配置can过滤器
extern void CAN_Filter_Init(CAN_HandleTypeDef *hcan);
// 把can的buf中的内容发送出去, 长度为8
extern void CAN_Transmit(CAN_HandleTypeDef *hcan, uint16_t ID, uint8_t *Buf);

// 联接CAN中断源和中断回调函数
extern void AttachInterrupt_CAN(CAN_HandleTypeDef *hcan, uint8_t RxBuf_Size, int Callback_count, ...);

#endif /* HAL_CAN_MODULE_ENABLED */

#endif
